type CustomElementClass = ReduceNewable<{
  new (): unknown;
  prototype: unknown;
}>;
// ------------------------------------------- //
export type ReduceNewable<T> = Omit<T, 'new'>;
export type ReduceCallable<T> = Pick<
  T,
  keyof T extends PropertyKey ? keyof T : never
>;
// ------------------------------------------- //

type Callable = {
  (): string;
  name: number;
};

type _ = ReduceCallable<Callable>;
// ------------  PropertyNew  ------------ //
type PropNew = {
  new: () => string;
};
let b!: PropNew;

b.new();

// ------------ MethodNew ------------ //
type MethodNew = {
  new (): string;
};

let c!: MethodNew;

new c();
